/* 
 * File:   basicInformation.h
 * Author: gilvolpe
 *
 * Created on March 25, 2013, 2:36 PM
 */

#ifndef BASICINFORMATION_H
#define	BASICINFORMATION_H

#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>

#include <unistd.h>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <sys/time.h>

using namespace std;

#define TIME_UPDATE_MS   10
#define SIDE_SIZE 700
#define RANDOM_NUMBER 10


//#define RADIUS_SPHERE  250.0f

#define SUN_RADIUS 10000.0f
#define MER_RADIUS 0.140f
#define VEN_RADIUS 0.350f
#define EAR_RADIUS 0.370f
#define MAR_RADIUS 0.200f
#define JUP_RADIUS 0.910f
#define SAT_RADIUS 0.770f
#define URA_RADIUS 0.570f
#define NET_RADIUS 0.520f
#define MOO_RADIUS 0.020f

#define FACTOR_MER 17933.3f
#define FACTOR_VEN 29266.7f
#define FACTOR_EAR 40733.3f
#define FACTOR_MAR 51066.7f
#define FACTOR_JUP 77133.3f
#define FACTOR_SAT 102276.0f
#define FACTOR_URA 126067.0f
#define FACTOR_NET 149533.0f

//#define SUN_DISPLAICMENT 106740.0f
//#define MER_DISPLAICMENT 380.0f
//#define VEN_DISPLAICMENT 935.0f
//#define EAR_DISPLAICMENT 976.0f
//#define MAR_DISPLAICMENT 532.0f
//#define JUP_DISPLAICMENT 10900.0f
//#define SAT_DISPLAICMENT 9200.0f
//#define URA_DISPLAICMENT 3900.0f
//#define NET_DISPLAICMENT 3900.0f
//#define MOO_DISPLAICMENT 3900.0f
//#define SPACESHIP_DISPLAICMENT 100.0f

#define SUN_ROTATION    0.0000f
#define MER_ROTATION    4.0920f
#define VEN_ROTATION    1.6010f
#define EAR_ROTATION    0.9863f
#define MAR_ROTATION    0.5240f
#define JUP_ROTATION    0.0842f
#define SAT_ROTATION    0.0334f
#define URA_ROTATION    0.0117f
#define NET_ROTATION    0.0062f


#define SLICES 25
#define STACKS 25      

#define FORWARD_SPACE_SHIP 10.00f
#define BACKWARD_SPACE_SHIP 10.00f

struct Point3D {
    GLfloat _x, _y, _z;

    Point3D(GLfloat x = 0, GLfloat y = 0, GLfloat z = 0) {
        _x = x;
        _y = y;
        _z = z;
    }
};

struct float3 {

    float3(float _x = 0.0f, float _y = 0.0f, float _z = 0.0f) : x(_x), y(_y), z(_z) {
    }

    float x;
    float y;
    float z;
};

struct float4 {

    float4(float _x = 0.0f, float _y = 0.0f, float _z = 0.0f, float _r = 0.0f)
    : x(_x), y(_y), z(_z), r(_r) {
    }

    float x;
    float y;
    float z;
    float r;
};

typedef struct float4 color4;

enum GALATICS_ELEMENTS {
    SUN,
    MER,
    VEN,
    EAR,
    MAR,
    JUP,
    SAT,
    URA,
    NET,
    MOO
};

enum PARAMETERS_MENU {
    ADD_SUN,
    ADD_MER,
    ADD_VEN,
    ADD_EAR,
    ADD_MAR,
    ADD_JUP,
    ADD_SAT,
    ADD_URA,
    ADD_NET,
    REM_SUN,
    REM_MER,
    REM_VEN,
    REM_EAR,
    REM_MAR,
    REM_JUP,
    REM_SAT,
    REM_URA,
    REM_NET,
    VIEW_SUN,
    VIEW_MER,
    VIEW_VEN,
    VIEW_EAR,
    VIEW_MAR,
    VIEW_JUP,
    VIEW_SAT,
    VIEW_URA,
    VIEW_NET,
    ADD_SPACESHIP,
    REM_SPACESHIP,
    VIEW_SPACESHIP,
    QUIT
};

#endif	/* BASICINFORMATION_H */

